package com.thzy.bbs.common;

import org.xutils.common.Callback;
import org.xutils.http.HttpMethod;
import org.xutils.http.RequestParams;
import org.xutils.x;

import java.util.Map;

/**
 * Http工具类
 *
 * @author LiRui
 * @version 1.0
 * @date 2016/12/1
 * @remark
 */


public class HttpRequestUtils {

    /**
     * 异步请求
     *
     * @param url      地址
     * @param headers  请求头
     * @param params   请求参数
     * @param outTime  请求时间
     * @param isFile   是否上传（上传时使用List<File>）
     * @param callback 回调方法
     * @return
     */
    public static void sendAsynchronous(HttpMethod method, String url, Map<String, String> headers, Map<String, Object> params,
                                        int outTime, Boolean isFile, Callback.CommonCallback<String> callback) {
        RequestParams requestParams = setParams(url, headers, params, outTime, isFile);
        x.http().request(method, requestParams, callback);
    }

    /**
     * 异步请求
     *
     * @param url      地址
     * @param headers  请求头
     * @param params   请求参数
     * @param outTime  请求时间
     * @param isFile   是否上传（上传时使用List<File>）
     * @param callback 回调方法
     * @return
     */
    public static void sendAsynchronous(HttpMethod method, String url, Map<String, String> headers, Map<String, Object> params,
                                        int outTime, Boolean isFile, Callback.ProgressCallback<String> callback) {
        RequestParams requestParams = setParams(url, headers, params, outTime, isFile);
        x.http().request(method, requestParams, callback);
    }


    /**
     * 同步请求
     *
     * @param url     地址
     * @param headers 请求头
     * @param params  请求参数
     * @param outTime 请求时间
     * @param isFile  是否上传(或下载)
     * @return
     */
    public static String sendSynchronous(HttpMethod method, String url, Map<String, String> headers, Map<String, Object> params, int outTime, Boolean isFile) throws Throwable {
        RequestParams requestParams = setParams(url, headers, params, outTime, isFile);
        return x.http().requestSync(method, requestParams, String.class);
    }


    /**
     * 设置参数
     *
     * @param url     请求地址
     * @param headers 请求头
     * @param params  请求参数
     * @param outTime 超时时间
     * @return
     */
    private static RequestParams setParams(String url, Map<String, String> headers, Map<String, Object> params, int outTime, Boolean isFile) {
        RequestParams requestParams = new RequestParams(url);
        if (!StringUtils.isBlankMap(headers)) {
            for (String key : headers.keySet()) {
                requestParams.setHeader(key, headers.get(key));
            }
        }
        if (!StringUtils.isBlankMap(params)) {
            for (String key : params.keySet()) {
                requestParams.addParameter(key, params.get(key));
            }
        }
        if (outTime != 0) {
            requestParams.setConnectTimeout(outTime);
        }
        /**
         * 上传需要设置
         */
        if (isFile) {
            requestParams.setMultipart(true);
        }
        /**
         * 缓存十秒
         */
        requestParams.setCacheMaxAge(10000);
        return requestParams;
    }
}
